package br.com.dallasmotopecas.comum.produto.vo;

import java.io.Serializable;
import java.sql.Date;
import java.sql.Time;

import br.com.dallasmotopecas.comum.fabricante.vo.FabricanteVo;
import br.com.dallasmotopecas.util.vo.EntidadeVo;

public class ProdutoVo extends EntidadeVo implements Serializable, Comparable<ProdutoVo>
{
	private static final long serialVersionUID = 1L;
	private String descricao;
	private FabricanteVo fabricanteVo;
	private double quantidade;
	private double quantidadeReposta;
	private double valor;
	private String tipoGiro;
	private Date dataRegistro;
	private Time horaRegistro;
	private int quantidadeDiaGiro;
	private int quantidadeDiaReposicao;
	
	public ProdutoVo()
	{
		
	}
	
	public String getDescricao()
	{
		return descricao;
	}

	public void setDescricao(String descricao)
	{
		this.descricao = descricao;
	}
	
	public FabricanteVo getFabricanteVo()
	{
		if (fabricanteVo == null)
			fabricanteVo = new FabricanteVo();
		
		return fabricanteVo;
	}

	public void setFabricanteVo(FabricanteVo fabricanteVo)
	{
		this.fabricanteVo = fabricanteVo;
	}

	public double getQuantidade()
	{
		return quantidade;
	}

	public void setQuantidade(double quantidade)
	{
		this.quantidade = quantidade;
	}

	public double getQuantidadeReposta()
	{
		return quantidadeReposta;
	}

	public void setQuantidadeReposta(double quantidadeReposta)
	{
		this.quantidadeReposta = quantidadeReposta;
	}

	public String getTipoGiro()
	{
		return tipoGiro;
	}

	public void setTipoGiro(String tipoGiro)
	{
		this.tipoGiro = tipoGiro;
	}

	public Date getDataRegistro()
	{
		return dataRegistro;
	}

	public void setDataRegistro(Date dataRegistro)
	{
		this.dataRegistro = dataRegistro;
	}

	public Time getHoraRegistro()
	{
		return horaRegistro;
	}

	public void setHoraRegistro(Time horaRegistro)
	{
		this.horaRegistro = horaRegistro;
	}

	public int getQuantidadeDiaGiro()
	{
		return quantidadeDiaGiro;
	}

	public void setQuantidadeDiaGiro(int quantidadeDiaGiro)
	{
		this.quantidadeDiaGiro = quantidadeDiaGiro;
	}

	public int getQuantidadeDiaReposicao()
	{
		return quantidadeDiaReposicao;
	}

	public void setQuantidadeDiaReposicao(int quantidadeDiaReposicao)
	{
		this.quantidadeDiaReposicao = quantidadeDiaReposicao;
	}

	public double getValor()
	{
		return valor;
	}

	public void setValor(double valor)
	{
		this.valor = valor;
	}

	@Override
	public int hashCode()
	{
		final int prime = 31;
		int result = super.hashCode();
		result = prime * result
				+ ((dataRegistro == null) ? 0 : dataRegistro.hashCode());
		result = prime * result
				+ ((descricao == null) ? 0 : descricao.hashCode());
		result = prime * result
				+ ((horaRegistro == null) ? 0 : horaRegistro.hashCode());
		long temp;
		temp = Double.doubleToLongBits(quantidade);
		result = prime * result + (int) (temp ^ (temp >>> 32));
		result = prime * result + quantidadeDiaGiro;
		result = prime * result + quantidadeDiaReposicao;
		temp = Double.doubleToLongBits(quantidadeReposta);
		result = prime * result + (int) (temp ^ (temp >>> 32));
		result = prime * result
				+ ((tipoGiro == null) ? 0 : tipoGiro.hashCode());
		temp = Double.doubleToLongBits(valor);
		result = prime * result + (int) (temp ^ (temp >>> 32));
		return result;
	}

	@Override
	public boolean equals(Object obj)
	{
		if (this == obj)
			return true;
		if (!super.equals(obj))
			return false;
		if (getClass() != obj.getClass())
			return false;
		ProdutoVo other = (ProdutoVo) obj;
		if (dataRegistro == null)
		{
			if (other.dataRegistro != null)
				return false;
		}
		else if (!dataRegistro.equals(other.dataRegistro))
			return false;
		if (descricao == null)
		{
			if (other.descricao != null)
				return false;
		}
		else if (!descricao.equals(other.descricao))
			return false;
		if (horaRegistro == null)
		{
			if (other.horaRegistro != null)
				return false;
		}
		else if (!horaRegistro.equals(other.horaRegistro))
			return false;
		if (Double.doubleToLongBits(quantidade) != Double
				.doubleToLongBits(other.quantidade))
			return false;
		if (quantidadeDiaGiro != other.quantidadeDiaGiro)
			return false;
		if (quantidadeDiaReposicao != other.quantidadeDiaReposicao)
			return false;
		if (Double.doubleToLongBits(quantidadeReposta) != Double
				.doubleToLongBits(other.quantidadeReposta))
			return false;
		if (tipoGiro == null)
		{
			if (other.tipoGiro != null)
				return false;
		}
		else if (!tipoGiro.equals(other.tipoGiro))
			return false;
		if (Double.doubleToLongBits(valor) != Double
				.doubleToLongBits(other.valor))
			return false;
		return true;
	}
	
	@Override
	public int compareTo(ProdutoVo o)
	{
		return this.descricao.compareTo(o.descricao);
	}
}
